"""
这是一个例子哦~
每一个文件都是一个爬虫的实例呀~ 如果需要添加新的爬虫方法都要在 <api的文件夹> 下新建一个文件呀<文件名随意> (注意只有爬虫实例得在api文件夹下呀)
但也不要太多实例啦 因为每一个实例都是一个新的线程呀~

首先需要导入 requests 和 run 方法哦~
使用 from common.request_tool import request, run
"""
from common.request_tool import request, run


# 这个注解是这个爬虫实例的入口呀  也就是 <只有使用<@run>注解的方法才会被执行> 注意一个实例只有第一个@run的方法会被执行哦~
@run
def run():
    # get_baidu()
    pass


# 这个注解是我自己封装的注解啦 使用@requests装饰后的方法在执行时会请求url里面的内容 然后将响应的结果传给被装饰的方法 也就是<方法的参数必须得有resp>
@request(url="http://www.baidu.com")
def get_baidu(resp):
    print(resp.text)


"""
当然也可以使用更加简洁的方式 -例如：
@run
@request(url="http://www.baidu.com")
def get_baidu(resp):
    pass
这样get_baidu这个方法也是会被当成实例的入口的

由于时间原因 只封装了 method="get", url=None, header=None, param=None 4个属性 当method的缺省值get <后续会逐步添加> -例如：
post请求：
@request(method="post", url="http://www.baidu.com")
......
请求时传递参数
@request(url="http://www.baidu.com", param={example_key:example_value})
......
由于时间原因 暂时不支持编程的方式将变量直接传递给注解 如果需要可以使用以下方法实现 -例如：
from common.request_tool import request, run


# 临时存储的请求参数
example_param = None


@run
@request(url="http://www.baidu.com")
def get_baidu(resp):
    ...处理页面响应 可能需要将参数传递给下一个页面 -xxxxx(resp)
    # 将参数存储至上面定义的变量中
    example_param = xxxxx(resp)  --可以是任意处理后的字典数据<类型必须为dist哦也就是<{}> >


@request(url="http://www.baidu.com", param=example_param)
def get_baidu_for_param(resp):
    pass
......
封装的内容不多 还有很多没实现的 推荐有python基础的 直接操作requests库 -例如：
# 直接操作requests库的话就只需要导入run方法就行啦
from common.request_tool import run
# 导入requests  注意最后有个<s>哦~
import requests


@run
def run():
    requests.get("http://www.baidu.com") --详细的使用方法见 https://docs.python-requests.org/zh_CN/latest/
"""


"""
----------------------------数据持久化--------------------------------
根据上面的方法爬取到内容以后 可以通过调用代码生成的dao方法操作数据库
首先需要导入生成dao模块 dao的输出路径我配置在了 根目录下的model/dao_utils下 默认我文件名和表明相同
sys.path.append("..")  -确保导入了sys 这个话的意思是切换当前路径到上一级<当前是在api下 上一级是根目录>
from model.dao_utils import <dao文件名>
from model.entity.<实体文件名> import <实体类名>


test_entity = <实体类名>()
...赋值操作
<dao文件名>.insert(test_entity)

......
当然有基础的也可以直接使用pymysql
sys.path.append("..")
from db import db_utils

# 首先获取连接
conn = db_utils.get_conn()
# 获取游标
cur = conn.cursor()
sql = <sql语句>
cur.execute(sql)
# 提交数据
conn.commit()
# 注意重点!!! 直接使用pymysql的话一定要记得关闭连接!!!
cur.close()
conn.close()

......
入如果需要获取刚插入数据的id的话可以使用insert方法
例如:
test_entity = <实体类名>()
...赋值操作
xxx_id = <dao文件名>.insert(test_entity)
print(xxx_id)  -结果为刚插入行的id

......
有关pymysql的详情可以查看官方文档 -https://pypi.org/project/PyMySQL/#documentation

----------------------------代码生成--------------------------------
代码生成的函数在根目录下的db/code_generate文件 直接运行即可  - python code_generate.py
然后根据提示输入表名即可 
输出后的文件会在 根目录下的 model/dao_utils 和 model/entity 下 文件名与表名相同

......
----------------------------日志输出--------------------------------
添加app容器控件 这是一个单例 也就是说所有跨程序的数据可以缓存在zpp容器空间中
例子:
# 导入app -注意和上面一样  python所有的导包操作都要根据当前的模块进行调整哦~<如果在父级目录则需要 sys.path.append("..") 再import>
import app
# 获取单例
app = app.App()
app.xxx = xxxx

...
输出日志时也需要导入app模块
例子:
import app
# 常规信息
app.App().log.info("这是一个例子呀")
# 警告
app.App().log.warning("这是一个例子呀")
# 错误
app.App().log.error("这是一个例子呀")

"""


"""
----------------------------task定时任务------------------------------



"""
